#ifndef __USER_APP_H
#define __USER_APP_H

#include "main.h"
#include "string.h"
#include "stdio.h"
#include "bsp_port.h"

#define VERSION_NUMBER "V103" // 版本号

// 内存地址
#define HOST_FLASH_ADDR 0x01
#define BAUD_FLASH_ADDR 0x02
#define TUBE_FLASH_ADDR 0x03

// Flash 掉电保存 地址
#define FLASH_HEAT_TIM_ADDR 0x01    // 加热时间
#define FLASH_WATER_VALUE_ADDR 0x02 // 设定水量

#define MB_R_HEARTBEAT 0x0000     // 心跳 报警信息+连接状态
#define MB_W_HEAT_START 0x0001    // 加热程序开始 时间+水量
#define MB_W_HEAT_STOP 0x0002     // 加热程序停止
#define MB_R_HEAT_STATE 0x0003    // 加热程序状态
#define MB_RW_HEAT_SWITCH 0x0004  // 加热开关
#define MB_RW_WATER_VALVE 0x0005  // 进水阀门
#define MB_R_KETTLE_STATE 0x0006  // 水壶状态
#define MB_R_SPILL_STATE 0x0007   // 水溢出状态
#define MB_R_HEAT_TIM 0x0008      // 加热剩余时间
#define MB_R_WATER_VALUE 0x0009   // 剩余水量
#define MB_REG_WATER_PLACE 0x0021 // 水位

typedef struct
{
    Switch_t m_State;    // 状态
    Switch_t m_OledFlag; // OLED更新标志
    float m_VBAT;        // 电池电压
    uint8_t m_EC11_Data; // 旋转编码器的数据
} u_MCU_t;

// 单片机信息
typedef struct
{
    uint8_t m_Set_Heat_Tim;    // 设定加热时间 单位s
    uint8_t m_Heat_Tim;        // 剩余加热时间
    uint8_t m_Now_Temp;        // 现在的温度
    uint8_t m_Heat_Switch;     // 加热开关
    uint8_t m_Valve_Switch;    // 阀门开关
    uint8_t m_KettleFlag;      // 水壶检测标志 1有0无
    uint8_t m_SpillFlag;       // 水溢出标志 1溢出0无溢出
    uint8_t m_WaterlineFlag;   // 水位标志 1到水位0是未到水位
    uint8_t m_Set_Water_Value; // 设定水量
    uint8_t m_Water_Value;     // 剩余水量
    uint8_t m_Water_Site;      // 水位
    uint8_t m_OnlineFlag;      // 在线标志
    uint16_t m_Vref_mV;        // 电池电压
} mcu_info_t;

extern u_MCU_t u_MCU;
extern mcu_info_t info;

extern bsp_TIM_t *Ti_ADC_COLLECT;
extern bsp_TIM_t *Ti_EC11;
extern bsp_TIM_t *Ti_KEY;
extern bsp_TIM_t *Ti_OLED; // 定时刷线OLED

void User_App(void);
void LED_Run_Debug(void);
void Battery_mV(void);


#endif
